# R 语言 平均值 中位数 和模式

# Mean 平均值 mean(x,trim=0,na.rm=FALSE);

# x 输入向量
# trim 用于排序向量两端丢弃一些观察结果
# na.rm 从向量中删除缺失值

# 创建vector

x <- c(12,7,3,4,2,18,2,54,-21,8,-5);

result.mean <- mean(x);

print( result.mean )

# 应用修剪选项
# 当提供trim参数 向量中的值被排序,然后从所提供的平均值中减去所需的观察值
# 当 trim = 0.3 来自每端的3ge值将从计算中减去以求得的平均值
# 在这种情况下，排序的向量是（-21，-5,2,3,4.2,7,8,12,18,54），并且从用于计算平均值的向量中移除的值是（-21，-5,2） 从左边和（12,18,54）从右边
result.mean <- mean(x,trim=0.3)
print( result.mean )

# 应用NA选项

# 如果存在缺失值,则平均函数返回NA
# 要从计算中删除缺少的值 请使用na.rm = TRUE 这意味着去除NA值
x <- c(12,7,3,4,2,18,2,54,-21,8,-5,NA);

result.mean <- mean( x )
print(result.mean)

result.mean <- mean(x,na.rm=TRUE);
print( result.mean )

# Median中位数 median(x,na.rm=FALSE)
# x输入向量
# na.rm 从向量中删除缺失值

median.result <- median(x,na.rm=TRUE);
print( median.result )

# Model 模式

# 模式是一组数据出现次数最多的值 Unike平均值和中位数，模式可以同时包含数字和字符数据。



getModel <- function(v){
  uniqv <- unique( v );
  uniqv[which.max(tabulate(match( v,uniqv )))]
  
}

v <- c(2,1,2,3,1,2,3,4,1,5,5,3,2,3)

# unique 删除重复元素
print("unique function ")
print( unique( v ))
# match 函数 返回向量x中的元素在table中出现的位置
print("match function")
print( match(v,unique(v)))
print("tabulate function")
# tabulate 函数 统计向量中每个元素出现的次数
print(tabulate(match(v,unique(v))))
# which.max 求最大值的下标 
print( which.max( tabulate(match(v,unique(v))) ))
result <- getModel( v )
print( result )